using System;
using System.Configuration;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
using BusinessRules;
using Microsoft.ApplicationBlocks.ExceptionManagement;
using Common;
using DataAccess;
using SystemFrameworks;

namespace MinCultura.Sinic.AdminUI.UsrControls
{
	/// <summary>
	///		Summary description for Cuidades.
	/// </summary>
	public abstract class Acciones : UserControl
	{
		#region Controles

		protected ImageButton btnAdicionar;
		protected ImageButton btnEliminar;
		protected ImageButton btnAprobar;
		protected ImageButton btnActualizar;
		protected ImageButton btnDesaprobar;
		protected ImageButton btnSiguiente;
		protected ImageButton btnRegresar;
		protected ImageButton btnCambiarClave;
		protected ImageButton btnEditar;
		protected ImageButton btnCancelar;
		protected ImageButton btnReporte;
		protected ImageButton btnEliminarCartas;
		protected ImageButton btnEliminarEvaluacion;

		#endregion

		#region Properties

		private int intPerfil;
		private string mstrTipoPagina = ApplicationConfiguration.Listado;


		public int Perfil
		{
			get { return intPerfil; }
			set { intPerfil = value; }
		}

		private int intOpcion;

		public int Opcion
		{
			get { return intOpcion; }
			set { intOpcion = value; }
		}

		private bool ActualizarDisponible
		{
			get
			{
				if (ViewState["ActualizarDisponible"] != null)
					return (bool) ViewState["ActualizarDisponible"];
				else
					return false;
			}
			set { ViewState.Add("ActualizarDisponible", value); }
		}

		private bool AdicionarDisponible
		{
			get
			{
				if (ViewState["AdicionarDisponible"] != null)
					return (bool) ViewState["AdicionarDisponible"];
				else
					return false;
			}
			set { ViewState.Add("AdicionarDisponible", value); }
		}


		private bool EliminarDisponible
		{
			get
			{
				if (ViewState["EliminarDisponible"] != null)
					return (bool) ViewState["EliminarDisponible"];
				else
					return false;
			}
			set { ViewState.Add("EliminarDisponible", value); }
		}

		private bool AprobarDisponible
		{
			get
			{
				if (ViewState["AprobarDisponible"] != null)
					return (bool) ViewState["AprobarDisponible"];
				else
					return false;
			}
			set { ViewState.Add("AprobarDisponible", value); }
		}

		private bool DesaprobarDisponible
		{
			get
			{
				if (ViewState["DesaprobarDisponible"] != null)
					return (bool) ViewState["DesaprobarDisponible"];
				else
					return false;
			}
			set { ViewState.Add("DesaprobarDisponible", value); }
		}


		public string ActualizarImagen
		{
			get { return btnActualizar.ImageUrl; }
			set { btnActualizar.ImageUrl = this.BasePath + value; }

		}

		public bool ActualizarVisible
		{
			get { return btnActualizar.Visible; }
			set
			{
				if (ActualizarDisponible)
					btnActualizar.Visible = value;
			}
		}

		public bool AdicionarVisible
		{
			get { return btnAdicionar.Visible; }
			set
			{
				if (AdicionarDisponible)
					btnAdicionar.Visible = value;
			}
		}

		public bool AdicionarProyectoVisible
		{
			get { return btnAdicionar.Visible; }
			set { btnAdicionar.Visible = value; }
		}

		public bool EliminarVisible
		{
			get { return btnEliminar.Visible; }
			set
			{
				if (EliminarDisponible)
				{
					btnEliminar.Visible = value;
				}
			}
		}

		public bool AprobarVisible
		{
			get { return btnAprobar.Visible; }
			set
			{
				if (AprobarDisponible)
				{
					btnAprobar.Visible = value;
				}
			}
		}

		public bool DesaprobarVisible
		{
			get { return btnDesaprobar.Visible; }
			set
			{
				if (DesaprobarDisponible)
				{
					btnDesaprobar.Visible = value;
				}
			}
		}

		public bool RegresarVisible
		{
			get { return btnRegresar.Visible; }
			set { btnRegresar.Visible = value; }
		}

		public bool SiguienteVisible
		{
			get { return btnSiguiente.Visible; }
			set { btnSiguiente.Visible = value; }
		}

		public bool CambiarClaveVisible
		{
			get { return btnCambiarClave.Visible; }
			set { btnCambiarClave.Visible = value; }
		}

		public bool EditarVisible
		{
			get { return btnEditar.Visible; }
			set { btnEditar.Visible = value; }
		}

		public bool CancelarVisible
		{
			get { return btnCancelar.Visible; }
			set { btnCancelar.Visible = value; }
		}

		public bool ReporteVisible
		{
			get { return btnReporte.Visible; }
			set { btnReporte.Visible = value; }
		}

		public bool EliminarEvaluacionVisible
		{
			get { return btnEliminarEvaluacion.Visible; }
			set { btnEliminarEvaluacion.Visible = value; }
		}

		public bool EliminarCartasVisible
		{
			get { return btnEliminarCartas.Visible; }
			set { btnEliminarCartas.Visible = value; }
		}

		public string EliminarAtributos
		{
			get { return btnEliminar.Attributes["onclick"]; }
			set { btnEliminar.Attributes["onclick"] = value; }
		}

		public string ActualizarAtributos
		{
			get { return btnActualizar.Attributes["onclick"]; }
			set { btnActualizar.Attributes["onclick"] = value; }
		}

		public string AdicionarAtributos
		{
			get { return btnAdicionar.Attributes["onclick"]; }
			set { btnAdicionar.Attributes["onclick"] = value; }
		}

		public string AprobarAtributos
		{
			get { return btnAprobar.Attributes["onclick"]; }
			set { btnAprobar.Attributes["onclick"] = value; }
		}

		public string DesaprobarAtributos
		{
			get { return btnDesaprobar.Attributes["onclick"]; }
			set { btnDesaprobar.Attributes["onclick"] = value; }
		}

		public string RegresarAtributos
		{
			get { return btnRegresar.Attributes["onclick"]; }
			set { btnRegresar.Attributes.Add("onclick", value); }
		}

		public string EditarAtributos
		{
			get { return btnEditar.Attributes["onclick"]; }
			set { btnEditar.Attributes["onclick"] = value; }
		}

		public string CancelarAtributos
		{
			get { return btnCancelar.Attributes["onclick"]; }
			set { btnCancelar.Attributes["onclick"] = value; }
		}

		public string ReporteAtributos
		{
			get { return btnReporte.Attributes["onclick"]; }
			set { btnReporte.Attributes["onclick"] = value; }
		}

		public string EliminarEvaluacionAtributos
		{
			get { return btnEliminarEvaluacion.Attributes["onclick"]; }
			set { btnEliminarEvaluacion.Attributes["onclick"] = value; }
		}

		public string EliminarCartasAtributos
		{
			get { return btnEliminarCartas.Attributes["onclick"]; }
			set { btnEliminarCartas.Attributes["onclick"] = value; }
		}


		public string BasePath
		{
			get
			{
				//mstrBasePath=DefaultPath1();
				return DefaultPath1();
			}
		}

		public string TipoPagina
		{
			get
			{
				if (ViewState["TipoPagina"] != null)
					mstrTipoPagina = ViewState["TipoPagina"].ToString();

				return mstrTipoPagina;
			}
			set
			{
				ViewState["TipoPagina"] = value;
				mstrTipoPagina = value;
			}
		}

		public string ReporteImageUrl
		{
			get { return btnReporte.ImageUrl; }
			set { btnReporte.ImageUrl = this.BasePath + value; }
		}

		public string EditarImageUrl
		{
			get { return btnEditar.ImageUrl; }
			set { btnEditar.ImageUrl = this.BasePath + value; }
		}

		#endregion Properties

		#region Declaracion Eventos

		public delegate void btnAdicionar_OnClickEventHandler(object sender, BotonesAccion_OnClickEventArgs e);

		public event btnAdicionar_OnClickEventHandler btnAdicionar_OnClick;

		public delegate void btnActualizar_OnClickEventHandler(object sender, BotonesAccion_OnClickEventArgs e);

		public event btnActualizar_OnClickEventHandler btnActualizar_OnClick;

		public delegate void btnEliminar_OnClickEventHandler(object sender, BotonesAccion_OnClickEventArgs e);

		public event btnEliminar_OnClickEventHandler btnEliminar_OnClick;

		public delegate void btnAprobar_OnClickEventHandler(object sender, BotonesAccion_OnClickEventArgs e);

		public event btnAprobar_OnClickEventHandler btnAprobar_OnClick;

		public delegate void btnDesaprobar_OnClickEventHandler(object sender, BotonesAccion_OnClickEventArgs e);

		public event btnDesaprobar_OnClickEventHandler btnDesaprobar_OnClick;

		public delegate void btnRegresar_OnClickEventHandler(object sender, BotonesAccion_OnClickEventArgs e);

		public event btnRegresar_OnClickEventHandler btnRegresar_OnClick;

		public delegate void btnCambiarClave_OnClickEventHandler(object sender, BotonesAccion_OnClickEventArgs e);

		public event btnCambiarClave_OnClickEventHandler btnCambiarClave_OnClick;

		public delegate void btnSiguiente_OnClickEventHandler(object sender, BotonesAccion_OnClickEventArgs e);

		public event btnSiguiente_OnClickEventHandler btnSiguiente_OnClick;

		public delegate void btnReporte_OnClickEventHandler(object sender, BotonesAccion_OnClickEventArgs e);

		public event btnReporte_OnClickEventHandler btnReporte_OnClick;

		public delegate void btnEliminarEvaluacion_OnClickEventHandler(object sender, BotonesAccion_OnClickEventArgs e);

		public event btnEliminarEvaluacion_OnClickEventHandler btnEliminarEvaluacion_OnClick;

		public delegate void btnEliminarCartas_OnClickEventHandler(object sender, BotonesAccion_OnClickEventArgs e);

		public event btnEliminarCartas_OnClickEventHandler btnEliminarCartas_OnClick;

		public delegate void btnExportarExcel_OnClickEventHandler(object sender, BotonesAccion_OnClickEventArgs e);

		public event btnExportarExcel_OnClickEventHandler btnExportarExcel_OnClick;

		public delegate void botones_OnClickEventHandler(object sender, BotonesAccion_OnClickEventArgs e);

		public event botones_OnClickEventHandler btnEditar_OnClick;
		public event botones_OnClickEventHandler btnCancelar_OnClick;

		#endregion Declaracion Eventos

		private void Page_Load(object sender, EventArgs e)
		{
			#region imagenes de los botones

			btnEliminar.ImageUrl = this.BasePath + "/Images/bt-eliminar.gif";
			if (btnActualizar.ImageUrl != this.BasePath + "/Images/bt-Ver Proyecto.GIF")
				btnActualizar.ImageUrl = this.BasePath + "/Images/bt-actualizar.gif";

			if (TipoPagina.Equals(ApplicationConfiguration.Formulario))
			{
				btnAdicionar.ImageUrl = this.BasePath + "/Images/bt-grabar.gif";
				btnAdicionar.ToolTip = "Grabar";
			}
			else
			{
				btnAdicionar.ImageUrl = this.BasePath + "/Images/bt-agregar.gif";
				btnAdicionar.ToolTip = "Agregar";

			}

			btnAprobar.ImageUrl = this.BasePath + "/Images/bt-aprobar.gif";
			btnCambiarClave.ImageUrl = this.BasePath + "/Images/bt-cambiocontrasena.gif";
			btnDesaprobar.ImageUrl = this.BasePath + "/Images/bt-desaprobar.gif";
			btnRegresar.ImageUrl = this.BasePath + "/Images/bt-regresar.gif";
			btnSiguiente.ImageUrl = this.BasePath + "/Images/bt-siguiente.gif";
			btnCancelar.ImageUrl = this.BasePath + "/Images/bt-eliminar.gif";
			//btnEditar.ImageUrl=this.BasePath +"/Images/bt-editar.gif";


			if (btnEditar.ImageUrl != this.BasePath + "/Images/bt-Ver Proyecto.GIF")
				btnEditar.ImageUrl = this.BasePath + "/Images/bt-actualizar.gif";
			btnEliminarEvaluacion.ImageUrl = this.BasePath + "/Images/bt-eliminarevaluacion.gif";
			btnEliminarCartas.ImageUrl = this.BasePath + "/Images/bt-eliminarcartas.gif";


			//btnReporte.ImageUrl=this.BasePath +"/Images/bt-irareportes.gif";

			#endregion

			// Mensaje para eliminar registros en cascada.
			if (btnEliminar.Attributes.Count == 0)
				btnEliminar.Attributes.Add("onclick", "return getHardDeleteConfirm('" + Utilidad.TraerMensaje("gmsgEliminar") + "');");
			btnRegresar.Attributes.Add("onclick", "return getExitConfirm('" + Utilidad.TraerMensaje("gmsgSalirFormulario") + "');");


		}

		protected string DefaultPath1()
		{
			string mstrPort = Request.ServerVariables["SERVER_PORT"];
			string mstrProtocol = Request.ServerVariables["SERVER_PORT_SECURE"];
			string mstrPath = Request.ApplicationPath;

			if (mstrPort == null || mstrPort == "80" || mstrPort == "443")
				mstrPort = "";
			else
				mstrPort = ":" + mstrPort;

			if (mstrProtocol == null || mstrProtocol == "0")
				mstrProtocol = "http://";
			else
				mstrProtocol = "https://";

			if (mstrPath == null || mstrPath == "/")
				mstrPath = "";
			else
				mstrPath = mstrPath;

			// *** Construccion del Url base el cual apunta  a la raiz de la aplicacion
			return mstrProtocol + Request.ServerVariables["SERVER_NAME"] + mstrPort + mstrPath;

		}

		#region Web Form Designer generated code

		protected override void OnInit(EventArgs e)
		{
			//
			// CODEGEN: This call is required by the ASP.NET Web Form Designer.
			//
			InitializeComponent();
			base.OnInit(e);
		}

		/// <summary>
		///		Required method for Designer support - do not modify
		///		the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			this.btnRegresar.Click += new System.Web.UI.ImageClickEventHandler(this.btnRegresar_Click);
			this.btnAdicionar.Click += new System.Web.UI.ImageClickEventHandler(this.btnAdicionar_Click);
			this.btnEditar.Click += new System.Web.UI.ImageClickEventHandler(this.btnEditar_Click);
			this.btnActualizar.Click += new System.Web.UI.ImageClickEventHandler(this.btnActualizar_Click);
			this.btnCancelar.Click += new System.Web.UI.ImageClickEventHandler(this.btnCancelar_Click);
			this.btnEliminar.Click += new System.Web.UI.ImageClickEventHandler(this.btnEliminar_Click);
			this.btnAprobar.Click += new System.Web.UI.ImageClickEventHandler(this.btnAprobar_Click);
			this.btnDesaprobar.Click += new System.Web.UI.ImageClickEventHandler(this.btnDesaprobar_Click);
			this.btnCambiarClave.Click += new System.Web.UI.ImageClickEventHandler(this.btnCambiarClave_Click);
			this.btnSiguiente.Click += new System.Web.UI.ImageClickEventHandler(this.btnSiguiente_Click);
			this.btnReporte.Click += new System.Web.UI.ImageClickEventHandler(this.btnReporte_Click);
			this.btnEliminarEvaluacion.Click += new System.Web.UI.ImageClickEventHandler(this.btnEliminarEvaluacion_Click);
			this.btnEliminarCartas.Click += new System.Web.UI.ImageClickEventHandler(this.btnEliminarCartas_Click);
			this.Load += new System.EventHandler(this.Page_Load);

		}

		#endregion

		#region Cargar

		public void Cargar(int intOpcion)
		{
			objUsuario tObjUsuario = new objUsuario();			
			tObjUsuario = (objUsuario)Session[Utilidad._SESSION_USUARIO];							
			try
			{
                Perfiles objBR = new Perfiles(ConfigurationManager.AppSettings["Conn"]);

                AdmPermisosData objDS = objBR.BuscarPermisos(tObjUsuario.UsuId, intOpcion);

				if (null != objDS)
				{
                    DataTable objDT = objDS;

					foreach (DataRow objRow  in objDT.Rows)
					{
						switch (objRow[AdmPermisosData.ACC_BOTON_FIELD].ToString().ToLower())
						{
							case "btnadicionar":
								AdicionarDisponible = true;
								btnAdicionar.Visible = true;
								break;
							case "btneliminar":
								EliminarDisponible = true;
								btnEliminar.Visible = true;
								break;
							case "btnactualizar":
								ActualizarDisponible = true;
								btnActualizar.Visible = true;
								break;
							case "btnaprobar":
								AprobarDisponible = true;
								DesaprobarDisponible = true;
								btnAprobar.Visible = true;
								btnDesaprobar.Visible = true;
								break;
						}
					}
				}
			}
			catch (ApplicationExceptionManager objEx)
			{
				ExceptionManager.Publish(objEx);
			}
		}

		#endregion

		/// <summary>
		/// Copia las propiedades 
		/// </summary>
		public void Copy(Acciones usrAcciones)
		{
			this.btnActualizar.Visible = usrAcciones.btnActualizar.Visible;
			this.ActualizarDisponible = usrAcciones.ActualizarDisponible;
			this.btnAdicionar.Visible = usrAcciones.btnAdicionar.Visible;
			this.AdicionarDisponible = usrAcciones.AdicionarDisponible;
			this.btnAprobar.Visible = usrAcciones.btnAprobar.Visible;
			this.AprobarDisponible = usrAcciones.AprobarDisponible;
			this.btnEliminar.Visible = usrAcciones.btnEliminar.Visible;
			this.EliminarDisponible = usrAcciones.EliminarDisponible;
		}

		#region Metodos para los Eventos

		private void btnAdicionar_Click(object sender, ImageClickEventArgs e)
		{
			if (null != btnAdicionar_OnClick)
				btnAdicionar_OnClick(this, new BotonesAccion_OnClickEventArgs(1));
		}

		private void btnActualizar_Click(object sender, ImageClickEventArgs e)
		{
			if (null != btnActualizar_OnClick)
				btnActualizar_OnClick(this, new BotonesAccion_OnClickEventArgs(2));
		}

		private void btnEliminar_Click(object sender, ImageClickEventArgs e)
		{
			if (null != btnEliminar_OnClick)
				btnEliminar_OnClick(this, new BotonesAccion_OnClickEventArgs(3));
		}

		private void btnAprobar_Click(object sender, ImageClickEventArgs e)
		{
			if (null != btnAprobar_OnClick)
				btnAprobar_OnClick(this, new BotonesAccion_OnClickEventArgs(4));
		}

		private void btnDesaprobar_Click(object sender, ImageClickEventArgs e)
		{
			if (null != btnDesaprobar_OnClick)
				btnDesaprobar_OnClick(this, new BotonesAccion_OnClickEventArgs(5));
		}

		private void btnRegresar_Click(object sender, ImageClickEventArgs e)
		{
			if (null != btnRegresar_OnClick)
				btnRegresar_OnClick(this, new BotonesAccion_OnClickEventArgs(0));
		}

		private void btnSiguiente_Click(object sender, ImageClickEventArgs e)
		{
			if (null != btnSiguiente_OnClick)
				btnSiguiente_OnClick(this, new BotonesAccion_OnClickEventArgs(0));
		}

		private void btnCambiarClave_Click(object sender, ImageClickEventArgs e)
		{
			if (null != btnCambiarClave_OnClick)
				btnCambiarClave_OnClick(this, new BotonesAccion_OnClickEventArgs(0));
		}

		private void btnCancelar_Click(object sender, ImageClickEventArgs e)
		{
			if (null != btnCancelar_OnClick)
				btnCancelar_OnClick(this, new BotonesAccion_OnClickEventArgs(0));

		}

		private void btnEditar_Click(object sender, ImageClickEventArgs e)
		{
			if (null != btnEditar_OnClick)
				btnEditar_OnClick(this, new BotonesAccion_OnClickEventArgs(0));
		}

		private void btnReporte_Click(object sender, ImageClickEventArgs e)
		{
			if (null != btnReporte_OnClick)
				btnReporte_OnClick(this, new BotonesAccion_OnClickEventArgs(5));
		}

		private void btnEliminarEvaluacion_Click(object sender, ImageClickEventArgs e)
		{
			if (null != btnEliminarEvaluacion_OnClick)
				btnEliminarEvaluacion_OnClick(this, new BotonesAccion_OnClickEventArgs(5));
		}

		private void btnEliminarCartas_Click(object sender, ImageClickEventArgs e)
		{
			if (null != btnEliminarCartas_OnClick)
				btnEliminarCartas_OnClick(this, new BotonesAccion_OnClickEventArgs(5));
		}


	}

	#endregion

	public class BotonesAccion_OnClickEventArgs : EventArgs
	{
		private int intAccion;
		private string strNombreAccion;

		public int Accion
		{
			get { return intAccion; }
		}

		public string NombreAccion
		{
			get { return strNombreAccion; }
		}

		public BotonesAccion_OnClickEventArgs(int intIDAccion)
		{
			intAccion = intIDAccion;
            BusinessRules.Acciones objAcciones = new BusinessRules.Acciones(ConfigurationManager.AppSettings["Conn"]);
            strNombreAccion = objAcciones.TraerNombreAccion(intAccion);
		}

	}


}